package com.xu.sys.servlet;

import com.xu.sys.bean.SysUser;
import com.xu.sys.utils.Constant;
import com.xu.sys.utils.PageUtils;
import com.xu.sys.utils.StringUtils;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.lang.reflect.Method;

/**
 * 系统公共的Servlet
 * 我们约定客户端提交的请求中的action就是在Servlet要处理的方法的名称
 */
public abstract class BaseServlet extends HttpServlet {
    protected PageUtils pageUtils;


    /**
     * 通过反射的方式调用对象中的Action对应的方法
     *
     * @param req
     * @param resp 同时在 BaseServlet 中又做了抽象的处理。声明了增删改查常用的相关的方法。这样在具体的
     *             Servlet中我们就不用繁琐的自己去创建相关的基础放了。然后就可以改造 UserServlet 中的处理。
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws
            ServletException, IOException {
// 获取传递的Action参数
        String action = req.getParameter("action");
        try {
// 获取当前对象对应的Method对象
            Method method = this.getClass()
                    .getDeclaredMethod(action, HttpServletRequest.class,
                            HttpServletResponse.class);
// 调用方法
            method.invoke(this, req, resp);
        } catch (Exception e) {
// 调用方法执行的时候出现了异常
            e.printStackTrace();
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
            ServletException, IOException {
        doPost(req, resp);
    }

    // 定义增删改查的基础方法
    // 定义增删改查的基础方法
    public void list(HttpServletRequest req, HttpServletResponse resp) throws
            Exception {
        pageUtils = new PageUtils();
// 查询分页相关的参数
        String ps = req.getParameter("pageSize");
        String pn = req.getParameter("pageNum");
        String key = req.getParameter("key");
// 声明默认的分页参数
        int pageSize = 5; // 默认每页显示5条
        int pageNum = 1; // 默认第一页
        if (StringUtils.isNotEmpty(ps)) {
            pageSize = Integer.parseInt(ps);
        }
        if (StringUtils.isNotEmpty(pn)) {
            pageNum = Integer.parseInt(pn);
        }

        if (StringUtils.isNotEmpty(key)) {
            //如果查询条件不为空，设置当前页为 1
            pageNum = 1;
        }

        pageUtils.setPageNum(pageNum);
        pageUtils.setPageSize(pageSize);
        pageUtils.setKey(key);

    }

    ;

    public abstract void saveOrUpdate(HttpServletRequest req, HttpServletResponse resp)
            throws Exception;

    public abstract void saveOrUpdatePage(HttpServletRequest req, HttpServletResponse
            resp) throws Exception;

    public abstract void remove(HttpServletRequest req, HttpServletResponse resp)
            throws Exception;

    public abstract void findById(HttpServletRequest req, HttpServletResponse resp)
            throws Exception;

    public SysUser getCurrentLoginUser(HttpServletRequest req, HttpServletResponse resp) {
        //获取当前的用户信息
        HttpSession session = req.getSession();
        Object obj = session.getAttribute(Constant.LOGIN_USER);
        SysUser loginUser = null;//当前登录的用户
        if (obj != null) {
            loginUser = (SysUser) obj;
            String rolename = loginUser.getRolename();
            System.out.println(rolename);
            if (rolename.contains("超级管理员")) {
                //当前登录角色是管理员
                loginUser.setAdmin(true);
            } else {
                //当前登录用户是普通用户
                loginUser.setAdmin(false);
            }
        }
        return loginUser;
    }
}





